﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using log4net;
using Iudicium.Utilitarios;
using Iudicium.Servicio;
using Iudicium.Servicio.CRN;
using Iudicium.Tramites.CRN;

public partial class Servicios_Transaccion_ListaTransaccion : System.Web.UI.Page
{
    private static readonly ILog log = LogManager.GetLogger("LogFile");

    public string BackToUrl
    {
        set { BackToUrlHiddenField.Value = value; }
        get { return BackToUrlHiddenField.Value; }
    }

    public string EstadoServicio
    {
        get { return EstadoServicioHiddenField.Value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Session["TransaccionBackToUrl"] != null && !string.IsNullOrEmpty(Session["TransaccionBackToUrl"].ToString()))
            {
                BackToUrl = Session["TransaccionBackToUrl"].ToString();
                Session["TransaccionBackToUrl"] = null;
            }

            if (Session["ServicioId"] != null && !string.IsNullOrEmpty(Session["ServicioId"].ToString()))
            {
                this.ServicioIdHiddenField.Value = Session["ServicioId"].ToString();
                Session["ServicioId"] = null;
                CargarDatos();
            }
            else
            {
                Response.Redirect("~/Default.aspx");
            }
        }
    }

    private void CargarDatos()
    {
        int servicioId = 0;
        try
        {
            servicioId = Convert.ToInt32(ServicioIdHiddenField.Value);
        }
        catch (Exception ex)
        {
            log.Error("No se pudo convertir ServicioIdHiddenField.Value a un valor entero", ex);
        }
        try{

            Servicio.TipoServicio tipo = ServicioCRN.GetTipoServicioByServicioId(servicioId);
            if (tipo == Servicio.TipoServicio.Tramite)
            {
                Tramite objTramite = TramiteCRN.GetTramiteById(servicioId);
                EstadoServicioHiddenField.Value = objTramite.Estado;
            }
        }catch (Exception ex)
        {
            log.Error("No se pudo obtener los datos del servicio", ex);
        }
        if(!EstadoServicio.Equals("En Proceso"))
            NuevaTransaccionHyperlink.Visible = false;
    }

    protected void TransaccionGridView_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        int transaccionId = 0;
        try
        {
            transaccionId = Convert.ToInt32(e.CommandArgument);
        }
        catch (Exception ex)
        {
            log.Error("No se pudo obtener el id de la Transaccion del CommandArgument", ex);
        }
        if (transaccionId == 0)
            return;

        if (e.CommandName.Equals("EDITAR"))
        {
            Session["TransaccionId"] = transaccionId;
            Session["ServicioId"] = ServicioIdHiddenField.Value;
            Session["TransaccionBackToUrl"] = BackToUrl;
            Response.Redirect("~/Servicios/Transaccion/FormularioTransaccion.aspx");
            return;
        }

        if (e.CommandName.Equals("ELIMINAR"))
        {
            try
            {
                Iudicium.Transacciones.CRN.TransaccionCRN.DeleteTransaccion(transaccionId);
                Notificacion.MostrarNotificacion("La Transaccion se eliminó correctamente", Notificacion.TipoNotificacion.Alert);

            }
            catch (Exception ex)
            {
                log.Error("No se pudo eliminar la Transaccion con id: " + transaccionId, ex);
                Notificacion.MostrarNotificacion("Ocurrió un error al eliminar la Transaccion seleccionada", Notificacion.TipoNotificacion.Error);
            }
            ControlDeNotificacion.Update(); 
            TransaccionGridView.DataBind();
        }
    }

    protected void NuevaTransaccionHyperlink_Click(object sender, EventArgs e)
    {
        if (!string.IsNullOrEmpty(BackToUrl))
        {
            Session["TransaccionBackToUrl"] = BackToUrl;
        }
        Session["ServicioId"] = ServicioIdHiddenField.Value;
        Response.Redirect("~/Servicios/Transaccion/FormularioTransaccion.aspx");
    }

    protected void VolverLinkButton_Click(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(BackToUrl))
        {
            Response.Redirect("~/Default.aspx", true);
        }
        int servicioId = 0;
        try
        {
            servicioId = Convert.ToInt32(ServicioIdHiddenField.Value);
        }
        catch (Exception ex)
        {
            log.Error("No se pudo convertir ServicioIdHiddenField.Value a un valor entero", ex);
        }
        if (servicioId > 0)
        {
            Session["ServicioId"] = servicioId;
            Response.Redirect(BackToUrl, true);
        }
        else
        {
            Response.Redirect("~/Default.aspx", true);
        }
    }

    protected void TransaccionDataSource_Selected(object sender, ObjectDataSourceStatusEventArgs e)
    {
        if (e.Exception != null)
        {
            log.Error("No se pudo obtener la lista de Transacciones mediante la busqueda", e.Exception);
            e.ExceptionHandled = true;
        }
    }

    protected bool GetVisibilidad()
    {
        return EstadoServicio.Equals("En Proceso");
    }

    protected string GetLabel()
    {
        return EstadoServicio.Equals("En Proceso") ? "Editar" : "Ver";
    }

}
